package com.photography.exception;

/**
 * 业务错误码枚举类
 * 统一管理系统中的错误码
 */
public enum ErrorCode {

    /**
     * 成功
     */
    SUCCESS("0", "操作成功"),
    
    /**
     * 通用错误
     */
    ERROR("-1", "系统错误"),

    /**
     * 参数相关错误 1000~1999
     */
    PARAM_ERROR("1001", "参数无效"),
    PARAM_EMPTY("1002", "参数为空"),
    PARAM_TYPE_ERROR("1003", "参数类型错误"),
    PARAM_NOT_COMPLETE("1004", "参数缺失"),
    ADDRESS_NOT_EXIST("1004", "收货地址不存在"),

    /**
     * 用户相关错误 2000~2999
     */
    USER_NOT_EXIST("2001", "用户不存在"),
    USER_LOGIN_ERROR("2002", "账号或密码错误"),
    USER_DISABLED("2003", "账号已被禁用"),
    USER_NOT_LOGIN("2004", "用户未登录"),
    USER_NO_PERMISSION("2005", "用户无权限"),
    USER_ALREADY_EXIST("2006", "用户已存在"),
    USER_TOKEN_EXPIRED("2007", "token已过期"),
    USER_TOKEN_INVALID("2008", "token无效"),

    /**
     * 业务相关错误 3000~3999
     */
    BUSINESS_ERROR("3001", "业务处理异常"),
    DUPLICATE_OPERATION("3002", "重复操作"),
    
    /**
     * 系统相关错误 4000~4999
     */
    SYSTEM_INNER_ERROR("4001", "系统内部错误"),
    SYSTEM_TIMEOUT("4002", "系统超时"),
    SYSTEM_RESOURCE_ERROR("4003", "系统资源异常"),
    
    /**
     * 数据库相关错误 5000~5999
     */
    DB_ERROR("5001", "数据库操作异常"),
    DATA_ALREADY_EXIST("5002", "数据已存在"),
    DATA_RELATION_ERROR("5003", "数据关联异常"),
    DATA_NOT_EXIST("5004", "数据不存在"),
    
    /**
     * 文件相关错误 6000~6999
     */
    FILE_SIZE_LIMIT("6001", "文件大小超出限制"),
    FILE_TYPE_NOT_SUPPORT("6002", "文件类型不支持"),
    ORDER_NOT_EXIST("7001", "订单不存在");




    /**
     * 错误码
     */
    private final String code;
    
    /**
     * 错误描述
     */
    private final String message;

    ErrorCode(String code, String message) {
        this.code = code;
        this.message = message;
    }

    public String getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
    
    /**
     * 通过错误码获取枚举
     * 
     * @param code 错误码
     * @return 对应的枚举对象，如果不存在则返回ERROR
     */
    public static ErrorCode getByCode(String code) {
        for (ErrorCode errorCode : ErrorCode.values()) {
            if (errorCode.getCode().equals(code)) {
                return errorCode;
            }
        }
        return ERROR;
    }
} 